gusucode.com > VC++ RingSDK界面库 > VC++ RingSDK界面库/code/libsrc/ringdows/ringdowapp.cpp

    /**********************************************************************
//
//
//        ##########                          ######  #########   # ######    #
//      #############                      ########### ######### #########  ###
//     ######## # ###  ##                 ############# ##    ## #####  # ####
//     ####  ##    ## ###                 ###     ### # #      #####   #####
//          #     ###  #            #     ##       ##  ##      ##     ###
//         ## ###### ##      ##  ####    ####          #       #     ##
//       #########  ###  ## ### #######   ######      ##      ##    ###
//      ######      ##  ######  ##  ##       ####     #      ##     ####
//     #######     ##   ###### ##  ###          ##   ##     ###    ######
//     #########   ##  ###### ## ######         ### ##    ###      #  #####
//    ##    ###### ####### ### #### ##  ## #######  ########      ##    ####
//    ##      #### ###  #  ### ### ##  ##########   ######       ##      ####
//   ##         ##                ##   #########    ####         #         ##
//               #              ###
//                              ##
//                             ###
//                             ##
//
//
//							RingSDK类库 ringmain.lib
//作者:临风
//
//版本:1.0
//
//声明:本类库可以自由使用而不须对作者作出任何回报,但作者希望能得到
//		  你的鼓励和支持。你可以对类库源码作出修改和改进,但希望你能在
//		  修改的同时给作者一份同样的副本。
//		  本类库不得用于任何商业用途,如确实需要,请与作者联系。
//
//e-mail:ringphone@sina.com
//
//原文件名:ringdowapp.cpp
//
//说明:对WinMain的封装实现,程序界面库将基于本类库
//
**********************************************************************/
#define MAKE_SELF_LIB
#include "ringmain.h"

RingdowApp RingApp;

IDLEPROC RingdowApp::OnIdleProc = (IDLEPROC)RingdowApp::OnIdle;
int RingdowApp::m_CmdShow = SW_SHOW;
LPSTR RingdowApp::m_szCommand = NULL;
HACCEL RingdowApp::m_hAccel = NULL;
RingBaseWnd* RingdowApp::m_window = NULL;
int RingdowApp::m_Result = 0;

RingdowApp::~RingdowApp()
{
	try
	{
		delete m_window;
		m_window = NULL;
	}
	catch(...)
	{
	}
}

BOOL RingdowApp::SetAccelTable(LPCTSTR lpTableName)
{
	m_hAccel = LoadAccelerators(GetInstance(),lpTableName);
   return (BOOL)m_hAccel;
}

int RingdowApp::Run(BOOL bShow)
{
   if(m_window)
   {
      if(m_window->m_windowType == ITIS_DIALOG)
			return m_Result;
		else
		{
			MSG msg;
			HWND hwndMDIClient = NULL;
			int nRet;
			
			if(bShow)
				ShowWindow(m_window->m_hWnd,m_CmdShow);
			else
				ShowWindow(m_window->m_hWnd,SW_HIDE);
			
			UpdateWindow(m_window->m_hWnd);
			
			if(m_window->m_windowType == ITIS_MDIFRAME)
			{
				hwndMDIClient = ((RingMDIFrameWnd*)m_window)->GetClient();
				((RingMDIFrameWnd*)m_window)->SetMonExtClientWnd(&hwndMDIClient);
			}

			while(TRUE)
			{
      		if(!PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
      			OnIdleProc();
            
            nRet = GetMessage(&msg,NULL,0,0);
				if(nRet && nRet != -1)
				{				
					if((hwndMDIClient == NULL || !TranslateMDISysAccel(hwndMDIClient, &msg))
						&&	!TranslateAccelerator(msg.hwnd,m_hAccel,&msg))
	        		{
   	        		TranslateMessage(&msg);  // Translates virtual key codes
      				DispatchMessage(&msg);   // Dispatches message to window
  		   		}
				}
   			else
					return msg.wParam;
			}
		}
   }
   else
   	return 0;
}

LRESULT RingdowApp::OnIdle(void)
{
   return 0;
}

void RingdowApp::SetIdleProc(IDLEPROC IdleProc)
{
	OnIdleProc = IdleProc;
}